package com.xzit.rcpyxt.config;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * swagger-ui的配置
 * @author lc
 */
@Configuration
@EnableWebMvc
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xzit.rcpyxt.controller"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(setHeaderToken());
    }

    @SuppressWarnings("deprecation")
	private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("除了checkUserBind、userBind、/teacher/findTeacherList、/student/findByStudentList 这四个接口免接口校验，" +
                "token失效后通过checkUserBdind获取新的token，每个token有效期10分钟；除免校验接口外，其他接口请求头中必须带token和openId 签名密钥")
                .description("code：10000 成功\n" +
                        "code：10001 系统异常，请稍后重试\n" +
                        "code：10002 网络异常，请稍后重试\n" +
                        "code：10003 无效的身份信息\n" +
                        "code：10004 用户不存在\n" +
                        "code：10010 参数不能为空\n" +
                        "code：10011 参数异常\n" +
                        "code：10012 数据不存在\n" +
                        "code：10013 数据异常\n" +
                        "code：10020 code失效或者错误\n" +
                        "code：10021 code与appid不匹配\n" +
                        "code：10022 绑定失败\n" +
                        "code：10023 签到失败，超过签到范围\n")
                .termsOfServiceUrl("http://blog.csdn.net/itguangit")
                .contact("wbz")
                .version("1.0")
                .build();
    }
    
	private List<Parameter> setHeaderToken() {
        List<Parameter> parameter = new ArrayList<>();
        parameter.add(new ParameterBuilder().name("token").description("登录令牌 非token校验的接口请随意给值").defaultValue(" ")
        		.modelRef(new ModelRef("string")).parameterType("header").required(true).build());
        parameter.add(new ParameterBuilder().name("openId").description("签名账号").defaultValue(" ")
                .modelRef(new ModelRef("string")).parameterType("header").required(true).build());
        parameter.add(new ParameterBuilder().name("loginType").description("登录来源给api文档使用，api文档接口全部免token校验").defaultValue("api")
        		.modelRef(new ModelRef("string")).parameterType("header").required(true).build());
        return parameter;
    }

}
